class BaseExportJob < BackgroundJobWithProgress START_PROGRESS = 5 END_PROGRESS = 100 @queue = :backgroud_export def perform start_export data = export_data file_url = create_and_upload_file(data) end_export completed('file_url' => file_url) end def start_export initialize_data initialize_steps @progress = START_PROGRESS set_progress_status end def end_export @progress = END_PROGRESS set_progress_status end def initialize_data @organization = Organization.find(options['organization']) initialize_additional_data if defined?(initialize_additional_data) @items_to_export = get_items_to_export end def initialize_steps total = @items_to_export.count if total == 0 @progress_per_item = 0 else @progress_per_item = (END_PROGRESS - START_PROGRESS) / total end end def export_data items = [] @items_to_export.each do |item| items << item.export indicate_progress set_progress_status end data = items.compact.to_json set_progress_status data end def create_and_upload_file(data) json_file = create_file('json', get_file_name, data) # upload the pdf file to S3 upload_file(json_file) end def upload_file(file) uploader = OrganizationFileUploader.new("#{file}", @organization) upload_result = uploader.upload upload_result[:file_url] end end